// 导入用来创建JWT字符串的模块
const jsonWebToken = require( 'jsonwebtoken' );
// 导入在express环境下用来验证JWT的模块
const jwt = require( 'express-jwt' );

// 密钥
const secret = 'kaifamiao';
// 算法
const algorithm = 'HS256';
// 有效期
const expiresIn = 3600;

const tokenHelper = {
    // 根据参数创建token的辅助函数
    generate( payload ){
        // 创建JWT字符串
        let s = jsonWebToken.sign( payload , secret , { expiresIn } ,  { algorithm } );
        // 在JWT之前添加认证方式
        let token = 'Bearer ' + s ;
        return token ;
    },
    // 用来创建express中间件的函数
    middleware( unlessPaths ){
        const x = jwt( { 
            secret , 
            credentialsRequired: false ,
            algorithms: [ algorithm ]
        } );
        const m = x.unless({
            // 指定不需要进行Token验证的路径
            path: unlessPaths
        });
        // 返回中间件
        return m ;
    }
}

module.exports = tokenHelper ;